/*
 * @Author: guojiangang guojiangang@hikvision.com.cn
 * @Date: 2024-02-23 18:34:00
 * @LastEditors: guojiangang guojiangang@hikvision.com.cn
 * @LastEditTime: 2024-02-27 13:43:40
 * @FilePath: \cfase:\leetcode\160.相交链表.js
 * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
 */
/*
 * @lc app=leetcode.cn id=160 lang=javascript
 *
 * [160] 相交链表
 */

// @lc code=start
/**
 * Definition for singly-linked list.
 * function ListNode(val) {
 *     this.val = val;
 *     this.next = null;
 * }
 */

/**
 * @param {ListNode} headA
 * @param {ListNode} headB
 * @return {ListNode}
 */
var getIntersectionNode = function(headA, headB) {
  if (headA === null || headB === null) {
    return null;
  }
  let pA = headA, pB = headB;
  //指针 PA 和 指针 PB 不断向后遍历，直到找到相交点
  while (pA != pB) {
    // 指针 PA 一开始在链表 A 上遍历，当走到链表 A 的尾部即 null 时，跳转到链表 B 上 
    pA = pA == null ? headB : pA.next;
    // 指针 PB 一开始在链表 B 上遍历，当走到链表 B 的尾部即 null 时，跳转到链表 A 上 
    pB = pB == null ? headA : pB.next;
  }
  return pA;
};
// @lc code=end

